ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBmNmQ2YzkxLi44NmQ2MzY5IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTIgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMS4xOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIFBhdGNoIGJ5IFByYWthc2ggS3VtYXIsIDI3IEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBYQTI1MCBiYXNlZCBJbnRyaW5zeWMgQ2VyZiBib2FyZC4KKworKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAyNyBKdW4gMjAwNDoKKyAgZml4IGNvbW1lbnQgaW4gaW5jbHVkZS9jb21tb24uaAorCiAqIFJlbmFtZSBTQkM4NTYwIGludG8gc2JjODU2MCBmb3IgY29uc2lzdGVuY3kKIAogKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAyNCBKdW4gMjAwNDoKZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDM1NGI5ZWEuLjY5NDRkMzkgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMjMxLDYgKzIzMSwxMCBAQAogRTogYmt1aG5AbWV0cm93ZXJrcy5jb20KIEQgU3VwcG9ydCBmb3IgQ29sZGZpcmUgQ1BVOyBTdXBwb3J0IGZvciBNb3Rvcm9sYSBNNTI3MkMzIGFuZCBNNTI4MkVWQiBib2FyZHMKIAorTjogUHJha2FzaCBLdW1hcgorRTogcHJha2FzaEBlbWJlZHguY29tCitEICBTdXBwb3J0IGZvciBJbnRyaW5zeWMgQ0VSRiBQWEEyNTAgYm9hcmQuCisKIE46IFRob21hcyBMYW5nZQogRTogdGhvbWFzQGNvcmVsYXR1cy5zZQogRDogU3VwcG9ydCBmb3IgR1RIIGFuZCBkYmF1MXgwMCBib2FyZHM7IGxvdHMgb2YgUENNQ0lBIGZpeGVzCmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCBhNTI2ZmIwLi5mYThlODllIDEwMDY0NAotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTE0OSw3ICsxNDksNyBAQAogIyMgWHNjYWxlIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotTElTVF9weGE9ImNyYWRsZSBjc2IyMjYgaW5ub2tvbSBsdWJib2NrIHdlcGVwMjUwIHhtMjUwIHhzZW5naW5lIgorTElTVF9weGE9ImNlcmYyNTAgY3JhZGxlIGNzYjIyNiBpbm5va29tIGx1YmJvY2sgd2VwZXAyNTAgeG0yNTAgeHNlbmdpbmUiCiAKIExJU1RfaXhwPSJpeGRwNDI1IgogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDllMmYyYzguLjkwMDRkOGEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xMjE5LDYgKzEyMTksOSBAQAogIyMgWFNjYWxlIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorY2VyZjI1MF9jb25maWcgOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjZXJmMjUwCisKIGNyYWRsZV9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjcmFkbGUKIApkaWZmIC0tZ2l0IGEvYm9hcmQvY2VyZjI1MC9NYWtlZmlsZSBiL2JvYXJkL2NlcmYyNTAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiOTdkZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2NlcmYyNTAvTWFrZWZpbGUKQEAgLTAsMCArMSw0NyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBjZXJmMjUwLm8gZmxhc2gubworU09CSlMJOj0gbWVtc2V0dXAubworCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworLWluY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jZXJmMjUwL2NlcmYyNTAuYyBiL2JvYXJkL2NlcmYyNTAvY2VyZjI1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzQ1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jZXJmMjUwL2NlcmYyNTAuYwpAQCAtMCwwICsxLDc1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qCisgKiBNaXNjZWxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucworICovCisKK2ludCBib2FyZF9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJLyogbWVtb3J5IGFuZCBjcHUtc3BlZWQgYXJlIHNldHVwIGJlZm9yZSByZWxvY2F0aW9uICovCisJLyogc28gd2UgZG8gX25vdGhpbmdfIGhlcmUgKi8KKworCS8qIGFyY2ggbnVtYmVyIG9mIGNlcmYgUFhBIEJvYXJkICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IDEzOTsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHhhMDAwMDEwMDsKKworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisJc2V0ZW52KCJzdGRvdXQiLCAic2VyaWFsIik7CisJc2V0ZW52KCJzdGRlcnIiLCAic2VyaWFsIik7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGRyYW1faW5pdCAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVsxXS5zdGFydCA9IFBIWVNfU0RSQU1fMjsKKwlnZC0+YmQtPmJpX2RyYW1bMV0uc2l6ZSA9IFBIWVNfU0RSQU1fMl9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVsyXS5zdGFydCA9IFBIWVNfU0RSQU1fMzsKKwlnZC0+YmQtPmJpX2RyYW1bMl0uc2l6ZSA9IFBIWVNfU0RSQU1fM19TSVpFOworCWdkLT5iZC0+YmlfZHJhbVszXS5zdGFydCA9IFBIWVNfU0RSQU1fNDsKKwlnZC0+YmQtPmJpX2RyYW1bM10uc2l6ZSA9IFBIWVNfU0RSQU1fNF9TSVpFOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9jZXJmMjUwL2NvbmZpZy5tayBiL2JvYXJkL2NlcmYyNTAvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhODZjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jZXJmMjUwL2NvbmZpZy5tawpAQCAtMCwwICsxLDUgQEAKKyMKKyMgQ2VyZiBib2FyZCB3aXRoIFBYQTI1MCBjcHUKKyMKKyMKK1RFWFRfQkFTRSA9IDB4YTMwODAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL2NlcmYyNTAvZmxhc2guYyBiL2JvYXJkL2NlcmYyNTAvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTgyODkyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvY2VyZjI1MC9mbGFzaC5jCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDEKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisKKworZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CS8qIGluZm8gZm9yIEZMQVNIIGNoaXBzICAgICovCisKKy8qIEJvYXJkIHN1cHBvcnQgZm9yIDEgb3IgMiBmbGFzaCBkZXZpY2VzICovCisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgzMgorI3VuZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorCisjaWZkZWYgRkxBU0hfUE9SVF9XSURUSDE2CisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVzaG9ydAorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfc2hvcnQKKyNkZWZpbmUgU1dBUCh4KSAgICAgICAgICAgICAgIF9fc3dhYjE2KHgpCisjZWxzZQorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRICQl1bG9uZworI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfbG9uZworI2RlZmluZSBTV0FQKHgpICAgICAgICAgICAgICAgX19zd2FiMzIoeCkKKyNlbmRpZgorCisjZGVmaW5lIEZQVwkgICBGTEFTSF9QT1JUX1dJRFRICisjZGVmaW5lIEZQV1YgICBGTEFTSF9QT1JUX1dJRFRIVgorCisjZGVmaW5lIG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGdW5jdGlvbnMKKyAqLworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbyk7CitzdGF0aWMgaW50IHdyaXRlX2RhdGEgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpOworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbyk7Cit2b2lkIGlubGluZSBzcGluX3doZWVsICh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3Vuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKwl1bG9uZyBzaXplID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIFBIWVNfRkxBU0hfMSwgJmZsYXNoX2luZm9baV0pOworCQkJZmxhc2hfZ2V0X29mZnNldHMgKFBIWVNfRkxBU0hfMSwgJmZsYXNoX2luZm9baV0pOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIFBIWVNfRkxBU0hfMiwgJmZsYXNoX2luZm9baV0pOworCQkJZmxhc2hfZ2V0X29mZnNldHMgKFBIWVNfRkxBU0hfMiwgJmZsYXNoX2luZm9baV0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwYW5pYyAoImNvbmZpZ3VyZWQgdG9vIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOworCX0KKworCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycworCSAqLworCWZsYXNoX3Byb3RlY3QgKCBGTEFHX1BST1RFQ1RfU0VULAorCQkJQ0ZHX0ZMQVNIX0JBU0UsCisJCQlDRkdfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkJCSZmbGFzaF9pbmZvWzBdICk7CisKKwlmbGFzaF9wcm90ZWN0ICggRkxBR19QUk9URUNUX1NFVCwKKwkJCUNGR19FTlZfQUREUiwKKwkJCUNGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsICZmbGFzaF9pbmZvWzBdICk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKQoreworCWludCBpOworCisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJcmV0dXJuOworCX0KKworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBQSFlTX0ZMQVNIX1NFQ1RfU0laRSk7CisJCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsKKwkJfQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlpbnQgaTsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgorCQlwcmludGYgKCJJTlRFTCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCWNhc2UgRkxBU0hfMjhGMTI4SjNBOgorCQlwcmludGYgKCIyOEYxMjhKM0FcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiICUwOGxYJXMiLAorCQkJaW5mby0+c3RhcnRbaV0sCisJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOworCX0KKwlwcmludGYgKCJcbiIpOworCXJldHVybjsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCisgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAoRlBXICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJdm9sYXRpbGUgRlBXIHZhbHVlOworCisJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KKwlhZGRyWzB4NTU1NV0gPSAoRlBXKSAweDAwQUEwMEFBOworCWFkZHJbMHgyQUFBXSA9IChGUFcpIDB4MDA1NTAwNTU7CisJYWRkclsweDU1NTVdID0gKEZQVykgMHgwMDkwMDA5MDsKKworCW1iICgpOworCXZhbHVlID0gYWRkclswXTsKKworCXN3aXRjaCAodmFsdWUpIHsKKworCWNhc2UgKEZQVykgSU5URUxfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJaW5mby0+c2l6ZSA9IDA7CisJCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJfQorCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzFdOwkJCS8qIGRldmljZSBJRCAgICAgICAgKi8KKworCXN3aXRjaCAodmFsdWUpIHsKKworCWNhc2UgKEZQVykgSU5URUxfSURfMjhGMTI4SjNBOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxMjhKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEyODsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCWJyZWFrOwkJCQkvKiA9PiAxNiBNQiAgICAgKi8KKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGluZm8tPnNlY3Rvcl9jb3VudCA+IENGR19NQVhfRkxBU0hfU0VDVCkgeworCQlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCisJCQlpbmZvLT5zZWN0b3JfY291bnQsIENGR19NQVhfRkxBU0hfU0VDVCk7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKKwl9CisKKwlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJCS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisKKwlyZXR1cm4gKGluZm8tPnNpemUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitpbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJaW50IGZsYWcsIHByb3QsIHNlY3Q7CisJdWxvbmcgdHlwZSwgc3RhcnQsIGxhc3Q7CisJaW50IHJjb2RlID0gMDsKKworCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJdHlwZSA9IChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKTsKKwlpZiAoKHR5cGUgIT0gRkxBU0hfTUFOX0lOVEVMKSkgeworCQlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgJTA4bHggLSBhYm9ydGVkXG4iLAorCQkJaW5mby0+Zmxhc2hfaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJCQlwcm90Kys7CisJCX0KKwl9CisKKwlpZiAocHJvdCkgeworCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCisJCQlwcm90KTsKKwl9IGVsc2UgeworCQlwcmludGYgKCJcbiIpOworCX0KKworCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwlsYXN0ID0gc3RhcnQ7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCisJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCisJCQlGUFdWICphZGRyID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKKwkJCUZQVyBzdGF0dXM7CisKKwkJCXByaW50ZiAoIkVyYXNpbmcgc2VjdG9yICUyZCAuLi4gIiwgc2VjdCk7CisKKwkJCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJCQlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkqYWRkciA9IChGUFcpIDB4MDAyMDAwMjA7CS8qIGVyYXNlIHNldHVwICovCisJCQkqYWRkciA9IChGUFcpIDB4MDBEMDAwRDA7CS8qIGVyYXNlIGNvbmZpcm0gKi8KKworCQkJd2hpbGUgKCgoc3RhdHVzID0gKmFkZHIpICYgKEZQVykgMHgwMDgwMDA4MCkgIT0gKEZQVykgMHgwMDgwMDA4MCkgeworCQkJCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJCQkJcHJpbnRmICgiVGltZW91dFxuIik7CisJCQkJCSphZGRyID0gKEZQVykgMHgwMEIwMDBCMDsJLyogc3VzcGVuZCBlcmFzZSAgICAgKi8KKwkJCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJCQkJcmNvZGUgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCSphZGRyID0gMHgwMDUwMDA1MDsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNtZC4gICAqLworCQkJKmFkZHIgPSAweDAwRkYwMEZGOwkvKiByZXNlc3QgdG8gcmVhZCBtb2RlICAgICAgICAgICovCisKKwkJCXByaW50ZiAoIiBkb25lXG4iKTsKKwkJfQorCX0KKwlyZXR1cm4gcmNvZGU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqIDQgLSBGbGFzaCBub3QgaWRlbnRpZmllZAorICovCisKK2ludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyBjcCwgd3A7CisJRlBXIGRhdGE7CisJaW50IGNvdW50LCBpLCBsLCByYywgcG9ydF93aWR0aDsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXJldHVybiA0OworCX0KKy8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLworI2lmZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorCXdwID0gKGFkZHIgJiB+MSk7CisJcG9ydF93aWR0aCA9IDI7CisjZWxzZQorCXdwID0gKGFkZHIgJiB+Myk7CisJcG9ydF93aWR0aCA9IDQ7CisjZW5kaWYKKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcworCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IGw7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisJCWZvciAoOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCS0tY250OworCQkJKytjcDsKKwkJfQorCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisKKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKKwkgKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNudCA+PSBwb3J0X3dpZHRoKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF93aWR0aDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCX0KKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJCWNudCAtPSBwb3J0X3dpZHRoOworCQlpZiAoY291bnQrKyA+IDB4ODAwKSB7CisJCQlzcGluX3doZWVsICgpOworCQkJY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGNudCA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQktLWNudDsKKwl9CisJZm9yICg7IGkgPCBwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCX0KKworCXJldHVybiAod3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCBvciBoYWxmd29yZCB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSkKK3sKKwlGUFdWICphZGRyID0gKEZQV1YgKikgZGVzdDsKKwl1bG9uZyBzdGF0dXM7CisJaW50IGZsYWc7CisKKwkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgeworCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICglbHgpXG4iLCAodWxvbmcpIGFkZHIsICphZGRyKTsKKwkJcmV0dXJuICgyKTsKKwl9CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCSphZGRyID0gKEZQVykgMHgwMDQwMDA0MDsJLyogd3JpdGUgc2V0dXAgKi8KKwkqYWRkciA9IGRhdGE7CisKKwkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLworCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKworCS8qIHdhaXQgd2hpbGUgcG9sbGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJd2hpbGUgKCgoc3RhdHVzID0gKmFkZHIpICYgKEZQVykgMHgwMDgwMDA4MCkgIT0gKEZQVykgMHgwMDgwMDA4MCkgeworCQlpZiAoZ2V0X3RpbWVyX21hc2tlZCAoKSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCisJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCkKK3sKKwlzdGF0aWMgaW50IHAgPSAwOworCXN0YXRpYyBjaGFyIHdbXSA9ICJcXC8tIjsKKworCXByaW50ZiAoIlwwMTAlYyIsIHdbcF0pOworCSgrK3AgPT0gMykgPyAocCA9IDApIDogMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2NlcmYyNTAvbWVtc2V0dXAuUyBiL2JvYXJkL2NlcmYyNTAvbWVtc2V0dXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2QzNzNhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvY2VyZjI1MC9tZW1zZXR1cC5TCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogTW9zdCBvZiB0aGlzIHRha2VuIGZyb20gUmVkYm9vdCBoYWxfcGxhdGZvcm1fc2V0dXAuaCB3aXRoIGNsZWFudXAKKyAqCisgKiBOT1RFOiBJIGhhdmVuJ3QgY2xlYW4gdGhpcyB1cCBjb25zaWRlcmFibHksIGp1c3QgZW5vdWdoIHRvIGdldCBpdAorICogcnVubmluZy4gU2VlIGhhbF9wbGF0Zm9ybV9zZXR1cC5oIGZvciB0aGUgc291cmNlLiBTZWUKKyAqIGJvYXJkL2NyYWRsZS9tZW1zZXR1cC5TIGZvciBhbm90aGVyIFBYQTI1MCBzZXR1cCB0aGF0IGlzCisgKiBtdWNoIGNsZWFuZXIuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCitEUkFNX1NJWkU6ICAubG9uZyAgIENGR19EUkFNX1NJWkUKKworLyogd2FpdCBmb3IgY29wcm9jZXNzb3Igd3JpdGUgY29tcGxldGUgKi8KKyAgIC5tYWNybyBDUFdBSVQgcmVnCisgICBtcmMgIHAxNSwwLFxyZWcsYzIsYzAsMAorICAgbW92ICBccmVnLFxyZWcKKyAgIHN1YiAgcGMscGMsIzQKKyAgIC5lbmRtCisKKworLyoKKyAqIAlNZW1vcnkgc2V0dXAKKyAqLworCisuZ2xvYmwgbWVtc2V0dXAKK21lbXNldHVwOgorCisJLyogU2V0IHVwIEdQSU8gcGlucyBmaXJzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJbGRyCQlyMCwJPUdQU1IwCisJbGRyCQlyMSwJPUNGR19HUFNSMF9WQUwKKwlzdHIJCXIxLAlbcjBdCisKKwlsZHIJCXIwLAk9R1BTUjEKKwlsZHIJCXIxLAk9Q0ZHX0dQU1IxX1ZBTAorCXN0cgkJcjEsICBbcjBdCisKKwlsZHIJCXIwLAk9R1BTUjIKKwlsZHIJCXIxLAk9Q0ZHX0dQU1IyX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HUENSMAorCWxkcgkJcjEsCT1DRkdfR1BDUjBfVkFMCisJc3RyCQlyMSwJW3IwXQorCisJbGRyCQlyMCwJPUdQQ1IxCisJbGRyCQlyMSwJPUNGR19HUENSMV9WQUwKKwlzdHIJCXIxLAlbcjBdCisKKwlsZHIJCXIwLAk9R1BDUjIKKwlsZHIJCXIxLAk9Q0ZHX0dQQ1IyX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HUERSMAorCWxkcgkJcjEsCT1DRkdfR1BEUjBfVkFMCisJc3RyCQlyMSwJW3IwXQorCisJbGRyCQlyMCwJPUdQRFIxCisJbGRyCQlyMSwJPUNGR19HUERSMV9WQUwKKwlzdHIJCXIxLAlbcjBdCisKKwlsZHIJCXIwLAk9R1BEUjIKKwlsZHIJCXIxLAk9Q0ZHX0dQRFIyX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HQUZSMF9MCisJbGRyCQlyMSwJPUNGR19HQUZSMF9MX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HQUZSMF9VCisJbGRyCQlyMSwJPUNGR19HQUZSMF9VX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HQUZSMV9MCisJbGRyCQlyMSwJPUNGR19HQUZSMV9MX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HQUZSMV9VCisJbGRyCQlyMSwJPUNGR19HQUZSMV9VX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HQUZSMl9MCisJbGRyCQlyMSwJPUNGR19HQUZSMl9MX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1HQUZSMl9VCisJbGRyCQlyMSwJPUNGR19HQUZSMl9VX1ZBTAorCXN0cgkJcjEsCVtyMF0KKworCWxkcgkJcjAsCT1QU1NSCQkJCS8qIGVuYWJsZSBHUElPIHBpbnMgKi8KKwlsZHIJCXIxLAk9Q0ZHX1BTU1JfVkFMCisJc3RyCQlyMSwJW3IwXQorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIEVuYWJsZSBtZW1vcnkgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogVGhlIHNlcXVlbmNlIGJlbG93IGlzIGJhc2VkIG9uIHRoZSByZWNvbW1lbmRlZCBpbml0IHN0ZXBzICAgICAgICAqLworCS8qIGRldGFpbGVkIGluIHRoZSBJbnRlbCBQWEEyNTAgT3BlcmF0aW5nIFN5c3RlbXMgRGV2ZWxvcGVycyBHdWlkZSwgKi8KKwkvKiBDaGFwdGVyIDEwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMTogV2FpdCBmb3IgYXQgbGVhc3QgMjAwIG1pY3Jvc2Vkb25kcyB0byBhbGxvdyBpbnRlcm5hbCAgICAgKi8KKwkvKiAgICAgICAgIGNsb2NrcyB0byBzZXR0bGUuIE9ubHkgbmVjZXNzYXJ5IGFmdGVyIGhhcmQgcmVzZXQuLi4gICAgICovCisJLyogICAgICAgICBGSVhNRTogY2FuIGJlIG9wdGltaXplZCBsYXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCWxkcgkJcjMsCT1PU0NSCQkJLyogcmVzZXQgdGhlIE9TIFRpbWVyIENvdW50IHRvIHplcm8gKi8KKwltb3YgCXIyLAkjMAorCXN0ciAJcjIsCVtyM10KKwlsZHIgCXI0LAk9MHgzMDAJCQkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KKwkJCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLworMToKKwlsZHIgCXIyLAlbcjNdCisJY21wIAlyNCwJcjIKKwliZ3QgCTFiCisKK21lbV9pbml0OgorCisJbGRyICAJcjEsCT1NRU1DX0JBU0UJCS8qIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHIuICovCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYTogSW5pdGlhbGl6ZSBBc3luY2hyb25vdXMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIE1TQyByZWdpc3RlcnM6IHRpbWluZywgYnVzIHdpZHRoLCBtZW0gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCS8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgIAlyMiwJPUNGR19NU0MwX1ZBTAorCXN0ciAgCXIyLAlbcjEsICNNU0MwX09GRlNFVF0KKwlsZHIgIAlyMiwJW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLworCQkJCQkJLyogdGhhdCBkYXRhIGxhdGNoZXMgICAgICAgICovCisJLyogTVNDMTogbkNTKDIsMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgCXIyLAk9Q0ZHX01TQzFfVkFMCisJc3RyICAJcjIsCVtyMSwgI01TQzFfT0ZGU0VUXQorCWxkciAgCXIyLAlbcjEsICNNU0MxX09GRlNFVF0KKworCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgIAlyMiwJPUNGR19NU0MyX1ZBTAorCXN0ciAgCXIyLAlbcjEsICNNU0MyX09GRlNFVF0KKwlsZHIgIAlyMiwJW3IxLCAjTVNDMl9PRkZTRVRdCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYjogSW5pdGlhbGl6ZSBDYXJkIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIE1FQ1I6IE1lbW9yeSBFeHBhbnNpb24gQ2FyZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgIAlyMiwJPUNGR19NRUNSX1ZBTAorCXN0ciAgCXIyLAlbcjEsICNNRUNSX09GRlNFVF0KKwlsZHIJIAlyMiwJW3IxLCAjTUVDUl9PRkZTRVRdCisKKwkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAJcjIsCT1DRkdfTUNNRU0wX1ZBTAorCXN0ciAgCXIyLAlbcjEsICNNQ01FTTBfT0ZGU0VUXQorCWxkcgkgCXIyLAlbcjEsICNNQ01FTTBfT0ZGU0VUXQorCisJLyogTUNNRU0xOiBDYXJkIEludGVyZmFjZSBzbG90IDEgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgCXIyLAk9Q0ZHX01DTUVNMV9WQUwKKwlzdHIgIAlyMiwJW3IxLCAjTUNNRU0xX09GRlNFVF0KKwlsZHIJIAlyMiwJW3IxLCAjTUNNRU0xX09GRlNFVF0KKworCS8qIE1DQVRUMDogQ2FyZCBJbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFRpbWluZywgc2xvdCAwICAgICAgICAgICAgKi8KKwlsZHIgIAlyMiwJPUNGR19NQ0FUVDBfVkFMCisJc3RyICAJcjIsCVtyMSwgI01DQVRUMF9PRkZTRVRdCisJbGRyCSAJcjIsCVtyMSwgI01DQVRUMF9PRkZTRVRdCisKKwkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCisJbGRyICAJcjIsID1DRkdfTUNBVFQxX1ZBTAorCXN0ciAgCXIyLCBbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCWxkcgkgCXIyLAlbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCisJLyogTUNJTzA6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMCAgICAgICAgICAgICAgICAgICAqLworCWxkciAgCXIyLCA9Q0ZHX01DSU8wX1ZBTAorCXN0ciAgCXIyLCBbcjEsICNNQ0lPMF9PRkZTRVRdCisJbGRyCSAJcjIsCVtyMSwgI01DSU8wX09GRlNFVF0KKworCS8qIE1DSU8xOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgIAlyMiwgPUNGR19NQ0lPMV9WQUwKKwlzdHIgIAlyMiwgW3IxLCAjTUNJTzFfT0ZGU0VUXQorCWxkcgkgCXIyLAlbcjEsICNNQ0lPMV9PRkZTRVRdCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKiBCZWZvcmUgYWNjZXNzaW5nIE1EUkVGUiB3ZSBuZWVkIGEgdmFsaWQgRFJJIGZpZWxkLCBzbyB3ZSBzZXQgICAgICovCisJLyogdGhpcyB0byBwb3dlciBvbiBkZWZhdWx0cyArIERSSSBmaWVsZCwgc2V0IFNEUkFNIGNsb2NrcyBmcmVlIHJ1bm5pbmcgKi8KKworCWxkciAgCXIzLCA9Q0ZHX01EUkVGUl9WQUwKKwlsZHIgIAlyMiwgPTB4RkZGCisJYW5kICAJcjMsIHIzLCAgcjIKKworCWxkcgkgCXIwLAlbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWJpYwkgCXIwLCByMCwgcjIKKwliaWMJIAlyMCwgcjAsICMoTURSRUZSX0swRlJFRXxNRFJFRlJfSzFGUkVFfE1EUkVGUl9LMkZSRUUpCisJb3JyCSAJcjAsIHIwLCByMworCisJc3RyCQlyMCwJW3IxLCAjTURSRUZSX09GRlNFVF0JLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDM6IEluaXRpYWxpemUgU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSAoRmxhc2gvUGVyaXBoZXJhbHMpICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogSW5pdGlhbGl6ZSBTWENORkcgcmVnaXN0ZXIuIEFzc2VydCB0aGUgZW5hYmxlIGJpdHMgICAgICAgICAgICAgICAqLworCisJLyogV3JpdGUgU1hNUlMgdG8gY2F1c2UgYW4gTVJTIGNvbW1hbmQgdG8gYWxsIGVuYWJsZWQgYmFua3Mgb2YgICAgICAqLworCS8qIHN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkuIE5vdGUgdGhhdCBTWExDUiBuZWVkIG5vdCBiZSB3cml0dGVuICAgKi8KKwkvKiBhdCB0aGlzIHRpbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkvKiBGSVhNRTogd2UgdXNlIGFzeW5jIG1vZGUgZm9yIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDQ6IEluaXRpYWxpemUgU0RSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogc2V0IE1EUkVGUiBhY2NvcmRpbmcgdG8gdXNlciBkZWZpbmUgd2l0aCBleGNlcHRpb24gb2YgYSBmZXcgYml0cyAqLworCisJbGRyICAgICByNCwgPUNGR19NRFJFRlJfVkFMCisJbGRyCQlyMiwgPShNRFJFRlJfSzBSVU58TURSRUZSX0swREIyfE1EUkVGUl9LMVJVTnxNRFJFRlJfSzFEQjJ8XAorCQkJCQlNRFJFRlJfSzJSVU4gfE1EUkVGUl9LMkRCMikKKwlhbmQJCXI0LCByNCwgcjIKKwliaWMJCXIwLAlyMCwJcjIKKwlvcnIJCXIwLCByMCwgcjQKKworCXN0ciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCisKKwkvKiBTdGVwIDRiOiBkZS1hc3NlcnQgTURSRUZSOlNMRlJTSC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwliaWMJCXIwLCByMCwJIyhNRFJFRlJfU0xGUlNIKQorCXN0ciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCisKKworCS8qIFN0ZXAgNGM6IGFzc2VydCBNRFJFRlI6RTFQSU4gYW5kIEUwUElPIGFzIGRlc2lyZWQsIHNldCBLWEZSRUUgICovCisKKwlsZHIgICAgIHI0LCA9Q0ZHX01EUkVGUl9WQUwKKwlsZHIJCXIyLCA9KE1EUkVGUl9FMFBJTnxNRFJFRlJfRTFQSU58TURSRUZSX0swRlJFRXwgXAorCQkJCQlNRFJFRlJfSzFGUkVFIHwgTURSRUZSX0syRlJFRSkKKwlhbmQJCXI0LCByNCwgcjIKKwlvcnIJCXIwLCByMCwgcjQKKwlzdHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCisKKwkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCisJLyogICAgICAgICAgY29uZmlndXJlIGJ1dCBub3QgZW5hYmxlIGVhY2ggU0RSQU0gcGFydGl0aW9uIHBhaXIuICAgICAqLworCisJbGRyCQlyNCwJPUNGR19NRENORkdfVkFMCisJYmljCQlyNCwJcjQsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQorCWJpYwkJcjQsIHI0LAkjKE1EQ05GR19ERTJ8TURDTkZHX0RFMykKKwlzdHIgICAgIHI0LCBbcjEsICNNRENORkdfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EQ05GRyAgICAgICAgKi8KKwlsZHIgICAgIHI0LCBbcjEsICNNRENORkdfT0ZGU0VUXQorCisKKwkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCisJLyogICAgICAgICAgMTAwLi4yMDAgtXNlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyIAlyMywgPU9TQ1IJCQkvKiByZXNldCB0aGUgT1MgVGltZXIgQ291bnQgdG8gemVybyAqLworCW1vdiAJcjIsICMwCisJc3RyIAlyMiwgW3IzXQorCWxkciAJcjQsID0weDMwMAkJCS8qIHJlYWxseSAweDJFMSBpcyBhYm91dCAyMDB1c2VjLCAgICovCisJCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLworMToKKwlsZHIgCXIyLCBbcjNdCisJY21wIAlyNCwgcjIKKwliZ3QgCTFiCisKKworCS8qIFN0ZXAgNGY6IFRyaWdnZXIgYSBudW1iZXIgKHVzdWFsbHkgOCkgcmVmcmVzaCBjeWNsZXMgYnkgICAgICAgICAgKi8KKwkvKiAgICAgICAgICBhdHRlbXB0aW5nIG5vbi1idXJzdCByZWFkIG9yIHdyaXRlIGFjY2Vzc2VzIHRvIGRpc2FibGVkICovCisJLyogICAgICAgICAgU0RSQU0sIGFzIGNvbW1vbmx5IHNwZWNpZmllZCBpbiB0aGUgcG93ZXIgdXAgc2VxdWVuY2UgICAqLworCS8qICAgICAgICAgIGRvY3VtZW50ZWQgaW4gU0RSQU0gZGF0YSBzaGVldHMuIFRoZSBhZGRyZXNzKGVzKSB1c2VkICAgKi8KKwkvKiAgICAgICAgICBmb3IgdGhpcyBwdXJwb3NlIG11c3Qgbm90IGJlIGNhY2hlYWJsZS4gICAgICAgICAgICAgICAgICovCisKKwlsZHIJCXIzLAk9Q0ZHX0RSQU1fQkFTRQorLnJlcHQgOAorCXN0cgkJcjIsCVtyM10KKy5lbmRyCisKKwkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCisJLyogICAgICAgICAgKE1EQ05GRzpERXggc2V0IHRvIDEpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyICAgICByMywgW3IxLCAjTURDTkZHX09GRlNFVF0KKwlvcnIJcjMsCXIzLAkjKE1EQ05GR19ERTB8TURDTkZHX0RFMSkKKwlzdHIgICAgIHIzLCBbcjEsICNNRENORkdfT0ZGU0VUXQorCisJLyogU3RlcCA0aDogV3JpdGUgTURNUlMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyICAgICByMiwgPUNGR19NRE1SU19WQUwKKwlzdHIgICAgIHIyLCBbcjEsICNNRE1SU19PRkZTRVRdCisKKworCS8qIFdlIGFyZSBmaW5pc2hlZCB3aXRoIEludGVsJ3MgbWVtb3J5IGNvbnRyb2xsZXIgaW5pdGlhbGlzYXRpb24gICAgKi8KKworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIERpc2FibGUgKG1hc2spIGFsbCBpbnRlcnJ1cHRzIGF0IGludGVycnVwdCBjb250cm9sbGVyICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2luaXRpcnFzOgorCisJbW92ICAgICByMSwgIzAJCS8qIGNsZWFyIGludC4gbGV2ZWwgcmVnaXN0ZXIgKElSUSwgbm90IEZJUSkgKi8KKwlsZHIgICAgIHIyLCA9SUNMUgorCXN0ciAgICAgcjEsIFtyMl0KKworCWxkciAgICAgcjIsID1JQ01SCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgICAgKi8KKwlzdHIgICAgIHIxLCBbcjJdCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBDbG9jayBpbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbml0Y2xrczoKKworCS8qIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2tzLCBhbmQgc2V0IHRoZSBjb3JlIGNsb2NrIGZyZXF1ZW5jeSAgKi8KKworCS8qIFR1cm4gT2ZmIEFMTCBvbi1jaGlwIHBlcmlwaGVyYWwgY2xvY2tzIGZvciByZS1jb25maWd1cmF0aW9uICAgICAgKi8KKwkvKiBOb3RlOiBTZWUgbGFiZWwgJ0VOQUJMRUNMS1MnIGZvciB0aGUgcmUtZW5hYmxpbmcgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMSwgPUNLRU4KKwltb3YgICAgIHIyLCAjMAorCXN0ciAgICAgcjIsIFtyMV0KKworCisJLyogZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIG5vIHZhbGlkIHJvdGFyeSBzd2l0Y2ggc2V0dGluZyBpcyBmb3VuZCAgICAqLworCWxkciAgICAgcjIsID0oQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMCkgIC8qIERFRkFVTFQ6IHsyMDAvMjAwLzEwMH0gKi8KKworCS8qIC4uLiBhbmQgd3JpdGUgdGhlIGNvcmUgY2xvY2sgY29uZmlnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIxLCA9Q0NDUgorCXN0ciAgICAgcjIsIFtyMV0KKworI2lmZGVmIFJUQworCS8qIGVuYWJsZSB0aGUgMzJLaHogb3NjaWxsYXRvciBmb3IgUlRDIGFuZCBQb3dlck1hbmFnZXIgICAgICAgICAgICAgKi8KKworCWxkciAgICAgcjEsID1PU0NDCisJbW92ICAgICByMiwgI09TQ0NfT09OCisJc3RyICAgICByMiwgW3IxXQorCisJLyogTk9URTogIHNwaW4gaGVyZSB1bnRpbCBPU0NDLk9PSyBnZXQgc2V0LCBtZWFuaW5nIHRoZSBQTEwgICAgICAgICAqLworCS8qIGhhcyBzZXR0bGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKzYwOgorCWxkciAgICAgcjIsIFtyMV0KKwlhbmRzICAgIHIyLCByMiwgIzEKKwliZXEgICAgIDYwYgorI2VuZGlmCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIFNhdmUgU0RSQU0gc2l6ZSAqLworICAgIGxkciAgICAgcjEsID1EUkFNX1NJWkUKKwlzdHIgICAJcjgsIFtyMV0KKworCS8qIEludGVycnVwdCBpbml0OiBNYXNrIGFsbCBpbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBsZHIJCXIwLAk9SUNNUiAvKiBlbmFibGUgbm8gc291cmNlcyAqLworCW1vdiAJcjEsCSMwCisgICAgc3RyIAlyMSwJW3IwXQorCisJLyogRklYTUUgKi8KKworI2RlZmluZSBOT0RFQlVHCisjaWZkZWYgTk9ERUJVRworCS8qRGlzYWJsZSBzb2Z0d2FyZSBhbmQgZGF0YSBicmVha3BvaW50cyAqLworCW1vdgkJcjAsIzAKKwltY3IJCXAxNSwwLHIwLGMxNCxjOCwwICAvKiBpYmNyMCAqLworCW1jcgkJcDE1LDAscjAsYzE0LGM5LDAgIC8qIGliY3IxICovCisJbWNyCQlwMTUsMCxyMCxjMTQsYzQsMCAgLyogZGJjb24gKi8KKworCS8qRW5hYmxlIGFsbCBkZWJ1ZyBmdW5jdGlvbmFsaXR5ICovCisJbW92CQlyMCwjMHg4MDAwMDAwMAorCW1jcgkJcDE0LDAscjAsYzEwLGMwLDAgIC8qIGRjc3IgKi8KKworI2VuZGlmCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRW5kIG1lbXNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworZW5kbWVtc2V0dXA6CisKKyAgICBtb3YgICAgIHBjLAlscgpkaWZmIC0tZ2l0IGEvYm9hcmQvY2VyZjI1MC91LWJvb3QubGRzIGIvYm9hcmQvY2VyZjI1MC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzM3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jZXJmMjUwL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIGNwdS9weGEvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzgyNDAvUkVBRE1FIGIvYm9hcmQvc2JjODI0MC9SRUFETUUKaW5kZXggNzAzNTY1ZC4uNzE1OTViNCAxMDA2NDQKLS0tIGEvYm9hcmQvc2JjODI0MC9SRUFETUUKKysrIGIvYm9hcmQvc2JjODI0MC9SRUFETUUKQEAgLTEzLDE0ICsxMywxNCBAQAogCiBNZW1vcnkgTWFwIGZyb20gQ1BVIHBvaW50IG9mIHZpZXc6CiAKLSAgICBTdGFydCAgICAgICAgU2l6ZSAgIEFjY2VzcyB0bworICAgIFN0YXJ0CSBTaXplCUFjY2VzcyB0bwogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgMHgwMDAwMDAwMCAgIDY0TUIgICBTRFJBTSBESU1NCi0gICAgMHhGRjAwMDAwMCAgICA0TUIgICBPbiBCb2FyZCBGTEFTSAotICAgIDB4RkZGMDAwMDAgIDUxMksgICAgT24gQm9hcmQgRkxBU0ggb3IgU1JBTSAoQ29uZmlndXJlZCBieSBqdW1wZXIpCi0gICAgMHhGRkUwMDAwMCAgICA4SyAgICBFRVBST00KLSAgICAweEZGRTgwMDAwICAgIDhCaXQgIExFRAotICAgIDB4RkZGODAwMDAgICAgOEJpdCAgVUFSVAorICAgIDB4MDAwMDAwMDAJIDY0TUIJU0RSQU0gRElNTQorICAgIDB4RkYwMDAwMDAJICA0TUIJT24gQm9hcmQgRkxBU0gKKyAgICAweEZGRjAwMDAwCTUxMksJT24gQm9hcmQgRkxBU0ggb3IgU1JBTSAoQ29uZmlndXJlZCBieSBqdW1wZXIpCisgICAgMHhGRkUwMDAwMAkgIDhLCUVFUFJPTQorICAgIDB4RkZFODAwMDAJICA4Qml0CUxFRAorICAgIDB4RkZGODAwMDAJICA4Qml0CVVBUlQKIAogCiBTZXR0aW5nIHRoZSBib2FyZCBKdW1wZXJzICYgU3dpdGNoZXM6CkBAIC0zMCwyNyArMzAsMjcgQEAKIAogICBHZW5lcmFsIEp1bXBlcnM6CiAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIHwgICBKdW1wZXJzICAgfCAgIEp1bXBlcnMgICAgfCAgICBKdW1wZXJzICAgIHwKKyAgIHwgICBKdW1wZXJzCSB8ICAgSnVtcGVycwl8ICAgIEp1bXBlcnMJfAogICAgfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfAotICAgfEpQMSAgICAgMS0yICB8IEpQMTQgICAgMS0yICB8IEpQMjcgICAgMS0yICAgfAotICAgfEpQNSAgICAgT3BlbiB8IEpQMTUgICAgMS0yICB8IEpQMjggICAgMi0zICAgfAotICAgfEpQOCAgICAgMS0yICB8IEpQMTYgICAgMS0yICB8IEpQMzMgICAgT3BlbiAgfAotICAgfEpQOSAgICAgMS0yICB8IEpQMTcgICAgMS0yICB8IEpQMzcgICAgQ2xvc2UgfAotICAgfEpQMTAgICAgMS0yICB8IEpQMTggICAgMS0yICB8ICAgICAgICAgICAgICAgfAotICAgfEpQMTEgICAgMi0zICB8IEpQMTkgICAgMS0yICB8ICAgICAgICAgICAgICAgfAotICAgfEpQMTIgICAgMS0yICB8IEpQMjAgICAgMS0yICB8ICAgICAgICAgICAgICAgfAotICAgfEpQMTMgICAgMS0yICB8IEpQMjUgICAgT3BlbiB8ICAgICAgICAgICAgICAgfAorICAgfEpQMQkgICAgMS0yCSB8IEpQMTQJICAgMS0yCXwgSlAyNwkgIDEtMgl8CisgICB8SlA1CSAgICBPcGVuIHwgSlAxNQkgICAxLTIJfCBKUDI4CSAgMi0zCXwKKyAgIHxKUDgJICAgIDEtMgkgfCBKUDE2CSAgIDEtMgl8IEpQMzMJICBPcGVuCXwKKyAgIHxKUDkJICAgIDEtMgkgfCBKUDE3CSAgIDEtMgl8IEpQMzcJICBDbG9zZSB8CisgICB8SlAxMCAgICAxLTIJIHwgSlAxOAkgICAxLTIJfAkJfAorICAgfEpQMTEgICAgMi0zCSB8IEpQMTkJICAgMS0yCXwJCXwKKyAgIHxKUDEyICAgIDEtMgkgfCBKUDIwCSAgIDEtMgl8CQl8CisgICB8SlAxMyAgICAxLTIJIHwgSlAyNQkgICBPcGVuIHwJCXwKICAgIHxfX19fX19fX19fX19ffF9fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX3wKIAogICBCdXMgc3BlZWQgSnVtcGVyczoKICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fCiAgICB8IDEwME1IeiBCdXMgfCA2NiBNSHogQnVzIHwKICAgIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfAotICAgfCBKUDIgICAgMS0yIHwgSlAyICAgIDEtMiB8Ci0gICB8IEpQMyAgICAxLTIgfCBKUDMgICAgMi0zIHwKLSAgIHwgSlA0ICAgIDEtMiB8IEpQNCAgICAyLTMgfAotICAgfCBKUDYgICAgMS0yIHwgSlA2ICAgIDItMyB8Ci0gICB8IEpQNyAgICAxLTIgfCBKUDcgICAgMS0yIHwKKyAgIHwgSlAyICAgIDEtMiB8IEpQMgkgMS0yIHwKKyAgIHwgSlAzICAgIDEtMiB8IEpQMwkgMi0zIHwKKyAgIHwgSlA0ICAgIDEtMiB8IEpQNAkgMi0zIHwKKyAgIHwgSlA2ICAgIDEtMiB8IEpQNgkgMi0zIHwKKyAgIHwgSlA3ICAgIDEtMiB8IEpQNwkgMS0yIHwKICAgIHxfX19fX19fX19fX198X19fX19fX19fX19ffAogCiAKQEAgLTYwLDcgKzYwLDcgQEAKIEJvYXJkOiBzYmM4MjQwIFJldmlzaW9uIDI1NSBMb2NhbCBCdXMgYXQgOTkgTUh6CiBEUkFNOiAgNjQgTUIKIEZMQVNIOiA1MTIga0IKLSAgICAgICAgMDAgIDExICA4MDg2ICAxMjI5ICAwMjAwICAwMAorCTAwICAxMQk4MDg2ICAxMjI5ICAwMjAwICAwMAogSW46ICAgIHNlcmlhbAogT3V0OiAgIHNlcmlhbAogRXJyOiAgIHNlcmlhbApAQCAtMTAxLDggKzEwMSw4IEBACiBGaWxlbmFtZSAndnhXb3Jrcy5zdCcuCiBMb2FkIGFkZHJlc3M6IDB4MTAwMDAwMAogTG9hZGluZzogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogZG9uZQogQnl0ZXMgdHJhbnNmZXJyZWQgPSA5Nzk5MjcgKGVmM2Q3IGhleCkKICMjIEV0aGVybmV0IE1BQyBhZGRyZXNzIG5vdCBjb3BpZWQgdG8gTlYgUkFNCkBAIC0xMTgsMjMgKzExOCwyMyBAQAogIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0KICBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0KICBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXQotICAgICAgXV1dXV1dXV1dXV0gIF1dXV0gICAgIF1dXV1dXV1dXV0gICAgICAgXV0gICAgICAgICAgICAgIF1dXV0gICAgICAgICAoUikKLSBdICAgICBdXV1dXV1dXV0gIF1dXV1dXSAgICAgXV1dXV1dXV0gICAgICAgXV0gICAgICAgICAgICAgICBdXV1dCi0gXV0gICAgIF1dXV1dXV0gIF1dXV1dXV1dICAgICBdXV1dXV0gXSAgICAgXV0gICAgICAgICAgICAgICAgXV1dXQotIF1dXSAgICAgXV1dXV0gXSAgICBdXV0gIF0gICAgIF1dXV0gXV1dICAgXV1dXV1dXV1dICBdXV1dIF1dIF1dXV0gIF1dICAgXV1dXV0KLSBdXV1dICAgICBdXV0gIF1dICAgIF0gIF1dXSAgICAgXV0gXV1dXV0gXV1dXV1dICAgXV0gXV1dXV1dXSBdXV1dIF1dICAgXV1dXQotIF1dXV1dICAgICBdICBdXV1dICAgICBdXV1dXSAgICAgIF1dXV1dXV1dIF1dXV0gICBdXSBdXV1dICAgIF1dXV1dXV0gICAgXV1dXQotIF1dXV1dXSAgICAgIF1dXV1dICAgICBdXV1dXV0gICAgXSAgXV1dXV0gIF1dXV0gICBdXSBdXV1dICAgIF1dXV1dXV1dICAgIF1dXV0KLSBdXV1dXV1dICAgIF1dXV1dICBdICAgIF1dXV1dXSAgXSAgICBdXV0gICBdXV1dICAgXV0gXV1dXSAgICBdXV1dIF1dXV0gICAgXV1dXQotIF1dXV1dXV1dICBdXV1dXSAgXV1dICAgIF1dXV1dXV0gICAgICBdICAgICBdXV1dXV1dICBdXV1dICAgIF1dXV0gIF1dXV0gXV1dXV0KKyAgICAgIF1dXV1dXV1dXV1dICBdXV1dCSAgICBdXV1dXV1dXV1dCSAgICAgXV0JCSAgICAgXV1dXQkgIChSKQorIF0gICAgIF1dXV1dXV1dXSAgXV1dXV1dICAgICBdXV1dXV1dXQkgICAgXV0JCSAgICAgXV1dXQorIF1dCV1dXV1dXV0JIF1dXV1dXV1dICAgICBdXV1dXV0gXQkgICBdXQkJICAgICBdXV1dCisgXV1dCSBdXV1dXSBdICAgIF1dXQkgXSAgICAgXV1dXSBdXV0JICBdXV1dXV1dXV0gIF1dXV0gXV0gXV1dXSAgXV0JXV1dXV0KKyBdXV1dCSAgXV1dICBdXSAgICBdCV1dXQldXSBdXV1dXSBdXV1dXV0JICBdXSBdXV1dXV1dIF1dXV0gXV0gICBdXV1dCisgXV1dXV0JICAgXSAgXV1dXSAgICAgXV1dXV0JICBdXV1dXV1dXSBdXV1dCSAgXV0gXV1dXSAgICBdXV1dXV1dCV1dXV0KKyBdXV1dXV0JICAgICBdXV1dXSAgICAgXV1dXV1dCSBdICBdXV1dXSAgXV1dXQkgIF1dIF1dXV0gICAgXV1dXV1dXV0JIF1dXV0KKyBdXV1dXV1dICAgIF1dXV1dICBdCV1dXV1dXQldICAgIF1dXSAgIF1dXV0JICBdXSBdXV1dICAgIF1dXV0gXV1dXQkgIF1dXV0KKyBdXV1dXV1dXSAgXV1dXV0gIF1dXQkgXV1dXV1dXSAgICAgIF0JICAgIF1dXV1dXV0gIF1dXV0gICAgXV1dXSAgXV1dXSBdXV1dXQogIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXQotIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dICAgICAgIERldmVsb3BtZW50IFN5c3RlbQorIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dCSAgICAgRGV2ZWxvcG1lbnQgU3lzdGVtCiAgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXQotIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSAgICAgICBWeFdvcmtzIHZlcnNpb24gNS41LjEKLSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSAgICAgICBLRVJORUw6IFdJTkQgdmVyc2lvbiAyLjYKLSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dICAgICAgIENvcHlyaWdodCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4sIDE5ODQtMjAwMworIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXQkgICBWeFdvcmtzIHZlcnNpb24gNS41LjEKKyBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXQkgIEtFUk5FTDogV0lORCB2ZXJzaW9uIDIuNgorIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0JIENvcHlyaWdodCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4sIDE5ODQtMjAwMwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVOiBNUEM4MjQwIC0tIFdpbmQgUml2ZXIgQlNQLiBTQkM4MjQwIEJvYXJkLiAgUHJvY2Vzc29yICMwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IFNpemU6IDB4MjAwMDAwMC4gIEJTUCB2ZXJzaW9uIDEuMi8yOC4KKwkJCSAgICAgICBDUFU6IE1QQzgyNDAgLS0gV2luZCBSaXZlciBCU1AuIFNCQzgyNDAgQm9hcmQuICBQcm9jZXNzb3IgIzAuCisJCQkgICAgICBNZW1vcnkgU2l6ZTogMHgyMDAwMDAwLiAgQlNQIHZlcnNpb24gMS4yLzI4LgogCiAtPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tb24uaCBiL2luY2x1ZGUvY29tbW9uLmgKaW5kZXggOGFiODQzMi4uMDJlZmJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24uaAorKysgYi9pbmNsdWRlL2NvbW1vbi5oCkBAIC00NjgsNyArNDY4LDcgQEAKIC8qICQoQ1BVKS8uLi4vdmlkZW8uYyAqLwogdWxvbmcJdmlkZW9fc2V0bWVtICh1bG9uZyk7CiAKLS8qIHBwYy9jYWNoZS5jICovCisvKiBsaWJfJChBUkNIKS9jYWNoZS5jICovCiB2b2lkCWZsdXNoX2NhY2hlICAgKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jZXJmMjUwLmggYi9pbmNsdWRlL2NvbmZpZ3MvY2VyZjI1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTM2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvY2VyZjI1MC5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIENFUkYyNTAgYm9hcmQuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIElmIHdlIGFyZSBkZXZlbG9waW5nLCB3ZSBtaWdodCB3YW50IHRvIHN0YXJ0IGFybWJvb3QgZnJvbSByYW0KKyAqIHNvIHdlIE1VU1QgTk9UIGluaXRpYWxpemUgY3JpdGljYWwgcmVncyBsaWtlIG1lbS10aW1pbmcgLi4uCisgKi8KKyNkZWZpbmUgQ09ORklHX0lOSVRfQ1JJVElDQUwKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKiAoZWFzeSB0byBjaGFuZ2UpCisgKi8KKyNkZWZpbmUgQ09ORklHX1BYQTI1MAkJMQkvKiBUaGlzIGlzIGFuIFBYQTI1MCBDUFUgICAgKi8KKyNkZWZpbmUgQ09ORklHX0NFUkYyNTAJCTEJLyogb24gQ2VyZiBQWEEgQm9hcmQJICAgICovCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTM4NDAwCisKKyN1bmRlZiAJQ09ORklHX1VTRV9JUlEJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCSAgICAoQ0ZHX0VOVl9TSVpFICsgMTI4KjEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworI2RlZmluZSBDT05GSUdfRFJJVkVSX1NNQzkxMTExCisjZGVmaW5lIENPTkZJR19TTUM5MTExMV9CQVNFIDB4MDQwMDAzMDAKKyNkZWZpbmUgQ09ORklHX1NNQ19VU0VfMzJfQklUCisKKy8qCisgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19GRlVBUlQJICAgICAxCS8qIHdlIHVzZSBGRlVBUlQgb24gQ0VSRiBQWEEgKi8KKworLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDT05GSUdfQ01EX0RGTCkKKworLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6RDA6Q0E6RjE6M0M6RDIKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjUKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDB4QzAwMDAiCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJInJvb3Q9L2Rldi9tdGRibG9jazMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMwLDM4NDAwIgorI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTIzMDQwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIJCTEKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMgkiPiAiCisKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNpZmRlZiBDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVAkJCSJ1Ym9vdCQgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZWxzZQorI2RlZmluZSBDRkdfUFJPTVBUCQkJIj0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNlbmRpZgorI2RlZmluZSBDRkdfQ0JTSVpFCQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRSAJCQkoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCisJCQkJCQkJCQkJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisjZGVmaW5lIENGR19ERVZJQ0VfTlVMTERFVgkxCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHhhMDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHhhMDgwMDAwMAkvKiA0IC4uLiA4IE1CIGluIERSQU0JKi8KKworI3VuZGVmCUNGR19DTEtTX0lOX0haCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJMHhhMjAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19IWgkJCQkzNjg2NDAwCQkvKiBpbmNyZW1lbnRlciBmcmVxOiAzLjY4NjQgTUh6ICovCisjZGVmaW5lIENGR19DUFVTUEVFRAkJMHgxNDEJCS8qIHNldCBjb3JlIGNsb2NrIHRvIDQwMC8yMDAvMTAwIE1IeiAqLworCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKworLyoKKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMTI4KjEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUQkoNCoxMDI0KQkvKiBJUlEgc3RhY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEJKDQqMTAyNCkJLyogRklRIHN0YWNrICovCisjZW5kaWYKKworLyoKKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwk0CSAgIAkJLyogd2UgaGF2ZSAyIGJhbmtzIG9mIERSQU0gKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQkJMHhhMDAwMDAwMCAJLyogU0RSQU0gQmFuayAjMSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkJMHgwNDAwMDAwMCAJLyogNjQgTUIgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8yCQkJMHhhNDAwMDAwMCAJLyogU0RSQU0gQmFuayAjMiAqLworI2RlZmluZSBQSFlTX1NEUkFNXzJfU0laRQkJMHgwMDAwMDAwMCAJLyogMCBNQiAqLworI2RlZmluZSBQSFlTX1NEUkFNXzMJCQkweGE4MDAwMDAwIAkvKiBTRFJBTSBCYW5rICMzICovCisjZGVmaW5lIFBIWVNfU0RSQU1fM19TSVpFCQkweDAwMDAwMDAwIAkvKiAwIE1CICovCisjZGVmaW5lIFBIWVNfU0RSQU1fNAkJCTB4YWMwMDAwMDAgCS8qIFNEUkFNIEJhbmsgIzQgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV80X1NJWkUJCTB4MDAwMDAwMDAgCS8qIDAgTUIgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCQkweDAwMDAwMDAwIAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0hfMgkJCTB4MDQwMDAwMDAgCS8qIEZsYXNoIEJhbmsgIzIgKi8KKyNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCQkJMHgwMjAwMDAwMCAJLyogMzIgTUIgKi8KKyNkZWZpbmUgUEhZU19GTEFTSF9CQU5LX1NJWkUJCTB4MDIwMDAwMDAgCS8qIDMyIE1CIEJhbmtzICovCisjZGVmaW5lIFBIWVNfRkxBU0hfU0VDVF9TSVpFCQkweDAwMDQwMDAwIAkvKiAyNTYgS0Igc2VjdG9ycyAoeDIpICovCisKKyNkZWZpbmUgQ0ZHX0RSQU1fQkFTRQkJCTB4YTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0RSQU1fU0laRQkJCTB4MDQwMDAwMDAKKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJCVBIWVNfRkxBU0hfMQorCisvKgorICogR1BJTyBzZXR0aW5ncworICovCisKKworI2RlZmluZSBDRkdfR1BTUjBfVkFMCQkweDAwNDA4MDMwCisjZGVmaW5lIENGR19HUFNSMV9WQUwJCTB4MDBCRkE4ODIKKyNkZWZpbmUgQ0ZHX0dQU1IyX1ZBTAkJMHgwMDAxQzAwMAorI2RlZmluZSBDRkdfR1BDUjBfVkFMCQkweEMwMDMxMTAwCisjZGVmaW5lIENGR19HUENSMV9WQUwJCTB4RkM0MDAzMDAKKyNkZWZpbmUgQ0ZHX0dQQ1IyX1ZBTAkJMHgwMDAwM0ZGRgorI2RlZmluZSBDRkdfR1BEUjBfVkFMCQkweEMwNDM5MzMwCisjZGVmaW5lIENGR19HUERSMV9WQUwJCTB4RkNGRkFCODIKKyNkZWZpbmUgQ0ZHX0dQRFIyX1ZBTAkJMHgwMDAxRkZGRgorI2RlZmluZSBDRkdfR0FGUjBfTF9WQUwJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0dBRlIwX1VfVkFMCQkweEE1MDAwMDEwCisjZGVmaW5lIENGR19HQUZSMV9MX1ZBTAkJMHg2MDAwODAxOAorI2RlZmluZSBDRkdfR0FGUjFfVV9WQUwJCTB4QUFBNUFBQUEKKyNkZWZpbmUgQ0ZHX0dBRlIyX0xfVkFMCQkweEFBQTAwMDBBCisjZGVmaW5lIENGR19HQUZSMl9VX1ZBTAkJMHgwMDAwMDAwMgorCisjZGVmaW5lIENGR19QU1NSX1ZBTAkJMHgyMAorCisvKgorICogTWVtb3J5IHNldHRpbmdzCisgKi8KKyNkZWZpbmUgQ0ZHX01TQzBfVkFMCQkweDEyNDQ3RkYwCisjZGVmaW5lIENGR19NU0MxX1ZBTAkJMHgxMkJDNTU1NAorI2RlZmluZSBDRkdfTVNDMl9WQUwJCTB4N0ZGOTdGRjEKKyNkZWZpbmUgQ0ZHX01EQ05GR19WQUwJCTB4MDAwMDFBQzkKKyNkZWZpbmUgQ0ZHX01EUkVGUl9WQUwJCTB4MDNDREMwMTcKKyNkZWZpbmUgQ0ZHX01ETVJTX1ZBTAkJMHgwMDAwMDAwMAorCisvKgorICogUENNQ0lBIGFuZCBDRiBJbnRlcmZhY2VzCisgKi8KKyNkZWZpbmUgQ0ZHX01FQ1JfVkFMCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19NQ01FTTBfVkFMCQkweDAwMDEwNTA0CisjZGVmaW5lIENGR19NQ01FTTFfVkFMCQkweDAwMDEwNTA0CisjZGVmaW5lIENGR19NQ0FUVDBfVkFMCQkweDAwMDEwNTA0CisjZGVmaW5lIENGR19NQ0FUVDFfVkFMCQkweDAwMDEwNTA0CisjZGVmaW5lIENGR19NQ0lPMF9WQUwJCTB4MDAwMDQ3MTUKKyNkZWZpbmUgQ0ZHX01DSU8xX1ZBTAkJMHgwMDAwNDcxNQorCisjZGVmaW5lIF9MRUQJCQkweDA4MDAwMDEwCS8qY2hlY2sgdGhpcyAqLworI2RlZmluZSBMRURfQkxBTksJCTB4MDgwMDAwNDAKKyNkZWZpbmUgTEVEX0dQSU8JCTB4MTAKKworLyoKKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkxMjggIAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgICAgKi8KKworLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCSgyNSpDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgyNSpDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkweDQwMDAwCQkvKiAyNTYgS2lCICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIXzEgKyBDRkdfTU9OSVRPUl9MRU4pCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLworCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCg==